/**
 *  Copyright 2011 Marco Berri - marcoberri@gmail.com
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and limitations under the License.
 **/
package com.url;


import java.io.IOException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.ServletConfig;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.utils.StringUtil;

/**
 *
 * @author Marco Berri marcoberri@gmail.com
 */
public class Redirect extends com.Base {

    /**
     *
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        if (isIpNullOrSpam(request.getRemoteAddr())) {
            return;
        }

        String data = request.getRequestURI().replaceAll(request.getContextPath(), "").replaceAll("/r/", "");
        String url_to_go = null;//getUrlFromMap(data);

        if (StringUtil.isNullOrEmpty(url_to_go)) {

            try {

                Statement stat = this.conn_url.createStatement();

                ResultSet rs = stat.executeQuery("select id,url from url where id='" + data + "'");

                if (rs.next()) {
                    url_to_go = rs.getString("url");

                    if (!url_to_go.startsWith("http://")) {
                        url_to_go = "http://" + url_to_go;
                    }

                }

                /*else {
                   fatal("Error page for url:" + data);
                   response.sendError(response.SC_NOT_FOUND);
                   return;
                }
*/
                rs.close();
                stat.close();

            } catch (SQLException e) {
                fatal("SQLException: " + e.getMessage(), e);
                return;
            }

        }


       // putUrlIdToMap(data, url_to_go);

        if (StringUtil.isNullOrEmpty(url_to_go)) {
            fatal("Error page for url:" + data);
            response.sendError(response.SC_NOT_FOUND);
            return;
        }

        saveStatsView(request, data);
        debug("start redirect from: " + data + " to:" + url_to_go);
        response.sendRedirect(url_to_go);

    }

    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /**
     *
     * @param config
     * @throws ServletException
     */
    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);

    }

    /**
     *
     */
    @Override
    public void destroy() {
        super.destroy();
    }

    /**
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Prende uno short url ed esegue il redirect";
    }// </editor-fold>
}
